//普通函数的this

// 断言
interface T {
  a: number,
  fn: (x: number) => void;
}

// 方法1：断言方式
let obj: T = {
  a: 1,
  fn: function (x: number) {
    // 报错
    // (<T>this).b;
  }
}

// 方法2：标注方式
let obj1: T = {
  a: 1,
  fn: function (this: T, x: number) {
    // 报错
    // this.b;
  }
}

// 箭头函数的this
let fn4 = (x: string) => {
  //...
}

// 箭头函数的this是固定的
interface T {
  a: number;
  fn: (x: number) => void;
}

// 箭头函数中的this指向外层作用域
let obj2: T = {
  a: 1,
  fn(this: T, x: number) {
    return () => {
      this
    }
  }
}